约瑟夫环问题,n个人围成一圈,报数到m的人出列,直至n个人全部出列,问出列人的顺序
手写循环链表模拟实现
#include<stdio.h>
#include<stdlib.h>
typedef struct SingleNode
{
int date;
struct SingleNode *next;
}list;
int main()
{
list *head,*vis,*temp;
int n,m;
printf("请输入总人数n:");
scanf("%d",&n);
printf("数到m的人出列,请输入m:");
scanf("%d",&m);
head=vis=(list*)malloc(sizeof(list));
head->date=1;
for(int i=2;i<=n;i++)
{
vis->next=(list*)malloc(sizeof(list));
vis=vis->next;
vis->date=i;
}
vis->next=head;
temp=head;
printf("出列顺序为:");
while(n)
{
for(int i=1;i<m;i++)
vis=vis->next;
temp=vis->next;
vis->next=temp->next;
printf("%d ",temp->date);
free(temp);
n--;
}
puts("\n");
return 0;
}